﻿using ABFramework;
using LuaFramework;
using System.Collections;
using System.Collections.Generic;
using UIFramework;
using UnityEngine;
using XLua;

[RequireComponent(typeof(GameInit))]
public class GameInit : MonoBehaviour
{
    #region 以下功能仅在编辑器模式生效,其他平台强制开启热更

    [Header("启用热更新功能")]
    [Header("以下功能仅在编辑器模式生效,其他平台强制开启热更")]
    public bool _EnabledHotUpdate = true;

    [Header("编辑器模式读取本地实时Lua代码")]
    public bool _OnlyReadLocalLuaScript = true;


    //[Header("开启日志打印功能")]
    //public bool _DebugInfo = true;

    #endregion

    //整个游戏的游戏管理对象
    public static GameObject GameManager;

    #region 将本脚本设置为单例模式
    private GameInit() { }
    public static GameInit Instance;
    #endregion


    private void Awake()
    {
        //切换场景该游戏物体不被销毁
        DontDestroyOnLoad(gameObject);

        //单例赋值
        Instance = this;

        //得到该游戏对象
        GameManager = gameObject;

        //Debug管理器初始化-记录所有日志
        DebugerManager.Instance.Init();


        //热更新初始化-开始检测更新
        HotUpdateManager.Instance.StartHotUpdate();
    }


    /// <summary>
    /// 更新完成后执行的首个方法
    /// </summary>
    void DirectlyStartGame()
    {
        //初始化管理器
        Init();

        /****************************************************/
        /******加载完基础资源包就正式进入游戏的Lua部分*******/
        /****************************************************/

        AssetBundleManager.Instance.LoadAllCommonBundle(() =>
        {
            //游戏正式开始
            Debug.Log("----------[[ Game Start ]]----------");

            /*进入Lua代码的入口*/
            LuaHelper.Instance.DoString("require('Entrance')");
        });
    }

    /// <summary>
    /// 初始化框架信息 管理器可以不需要初始化;
    /// 这里初始化是为了后面用起来速度更快;
    /// </summary>
    void Init()
    {
        //初始化LuaHelper
        LuaHelper.Instance.Init();

        //UI动画管理器初始化
        DTAnimManager.Instance.Init();

        //资源包加载管理器初始化
        AssetBundleManager.Instance.Init();

        /*游戏资源加载管理器初始化 
         *有延迟，需要加载主清单的资源*/
        LoadAssetManager.Instance.Init();

        //音频管理初始化
        AudioManager.Instance.Init();

        //异步加载场景管理器初始化
        LoadSceneManager.Instance.Init();

        //UI和UIMsg及红点管理器初始化
        ReddotManager.Instance.Init();
        UIManager.Instance.Init();
        UIMsgManager.Instance.Init();

        //Tips管理器初始化
        TipsManager.Instance.Init();

        //LuaHelper初始化
        LuaHelper.Instance.Init();
    }



    private void OnDestroy()
    {
        Debug.Log("哦豁,我莫得了!!!游戏管理器被删除!");
    }
}
